package com.hsc.sort;

import java.util.Arrays;

/**
 * @author
 * @date 2025-04-21
 * @Description 选择排序 每次从待排序序列中选择最小（或最大）的元素放到已排序序列的末尾，直到整个序列有序。
 */
public class selectSort {

    public static void main(String[] args) {
        int[] array = {5, 11, 8, 6, 9, 10, 12, 1, 20, 13}; // 待排序的数组
        selectSort(array);
    }

    /**
     * 选择排序
     *
     * @param arr
     */
    public static void selectSort(int[] arr) {


        // 外层循环 控制比较轮次 没轮比较会得到一个最小值
        for (int i = 0; i < arr.length - 1; i++) {
            // 内层循环 确定最小值位置 最小值的位置会变化的
            int minIndex = i; // 我从第一个元素开始比较
            // 这个循环是用来确定最小的元素下标的
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[minIndex]) {
                    // 最小值的索引下标发生表
                    minIndex = j;
                }
            }
            // 得到最小的值的下标索引 进行交换
            int temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
            System.out.println("第" + (i + 1) + "轮比较结果为：" + Arrays.toString(arr));
            //第1轮比较结果为：[1, 11, 8, 6, 9, 10, 12, 5, 20, 13]
            //第2轮比较结果为：[1, 5, 8, 6, 9, 10, 12, 11, 20, 13]
            //第3轮比较结果为：[1, 5, 6, 8, 9, 10, 12, 11, 20, 13]
            //第4轮比较结果为：[1, 5, 6, 8, 9, 10, 12, 11, 20, 13]
            //第5轮比较结果为：[1, 5, 6, 8, 9, 10, 12, 11, 20, 13]
            //第6轮比较结果为：[1, 5, 6, 8, 9, 10, 12, 11, 20, 13]
            //第7轮比较结果为：[1, 5, 6, 8, 9, 10, 11, 12, 20, 13]
            //第8轮比较结果为：[1, 5, 6, 8, 9, 10, 11, 12, 20, 13]
            //第9轮比较结果为：[1, 5, 6, 8, 9, 10, 11, 12, 13, 20]
        }


    }

}
